#include<bits/stdc++.h>
#define ll long long
#define pb emplace_back
#define pii pair<int,int>
#define fi first
#define se second
using namespace std;

const int N=1e6+5;
int n,q;
int a[N],s[N];
namespace rmq{
	int mn[N][__lg(N)+3],mx[N][__lg(N)+3];
	void init(){
		for(int i=0;i<=n;i++) mn[i][0]=mx[i][0]=s[i];
		for(int j=1;j<=21;j++) for(int i=0;i+(1<<j)-1<=n;i++)
			mn[i][j]=min(mn[i][j-1],mn[i+(1<<(j-1))][j-1]),
			mx[i][j]=max(mx[i][j-1],mx[i+(1<<(j-1))][j-1]);
	}
	int qmax(int l,int r){int d=__lg(r-l+1);return max(mx[l][d],mx[r-(1<<d)+1][d]);}
	int qmin(int l,int r){int d=__lg(r-l+1);return min(mn[l][d],mn[r-(1<<d)+1][d]);}
}using namespace rmq;
int L[N],R[N];ll ans[N];
int f[N];
void solve(int l,int r,vector<int>& id){
	if(id.empty()) return;
	// cerr<<l<<' '<<r<<endl;
	int mid=(l+r)>>1;
	vector<int> v1,v2;
	int mn=s[mid+1];
	f[mid+1]=0;for(int i=mid+2;i<=r;i++) mn=min(mn,s[i]),f[i]=max(f[i-1],s[i]-mn);
	mn=s[mid];
	f[mid]=0;for(int i=mid-1;i>=l;i--) mn=max(mn,s[i]),f[i]=max(f[i+1],mn-s[i]);
	// cerr<<f[0]<<endl;
	for(int i:id){
		if(R[i]<=mid) v1.pb(i);
		else if(L[i]>mid) v2.pb(i);
		else{
			// cerr<<qmax(mid+1,R[i])<<' '<<qmin(L[i],mid)<<endl;
			ans[i]=max({qmax(mid+1,R[i])-qmin(L[i],mid),f[L[i]],f[R[i]]});
		}
	}
	solve(l,mid,v1),solve(mid+1,r,v2);
}
int32_t main(){
	freopen("good.in","r",stdin);
	freopen("good.out","w",stdout);
	cin.tie(nullptr)->sync_with_stdio(false);
	int i,l,r;char ch;
	cin>>n>>q;
	for(i=1;i<=n;i++) cin>>ch,a[i]=(ch=='0'?-1:1);
	partial_sum(a,a+n+1,s);
	init();
	// cerr<<qmax(2,3)<<endl<<s[3]<<endl;
	ll aa=0;
	for(i=1;i<=q;i++) cin>>L[i]>>R[i],L[i]--;
	vector<int> tt;for(i=1;i<=q;i++) tt.pb(i);
	solve(0,n,tt);
	// for(i=0;i<=n;i++) cerr<<s[i]<<' ';cerr<<endl;
	for(i=1;i<=q;i++){
		L[i]++;
		// cin>>l>>r;
		// auto t1=qmin(l-1,r),t2=qmax(l-1,r);
		// if(t1.se<t2.se){
		// 	ret=s[l-1]-t1.fi+t2.fi-s[r];
		// }
		// else{
			// swap(t1,t2);
			// for(int j=l-1;j<r;j++) ret=max(ret,s[l-1]-qmin(l-1,j+1).fi+qmax(j,r).fi-s[r]);
			// ret=max(ret,s[l-1]-qmin(l-1,t1.se+1).fi+qmax(t1.se,r).fi-s[r]);
			// ret=max(ret,s[l-1]-qmin(l-1,t2.se).fi+qmax(t2.se-1,r).fi-s[r]);
		// }
		// cerr<<ans[i]<<' ';
		l=L[i],r=R[i];
		if(r-l+1==s[l-1]-s[r]) ans[i]=r-l+2;
		else ans[i]=s[l-1]-s[r]+ans[i];
		aa^=ans[i];
		// cerr<<ans[i]<<endl;
	}
	cout<<aa<<'\n';
	return 0;
}